import { defineStore } from 'pinia'
import { storage } from '../utils/storage'

/**
 * 角色代码常量
 * 集中管理角色代码，避免硬编码
 */
export const ROLE_CODES = {
  SUPER_ADMIN: 'SUPER_ADMIN',
  ADMIN: 'ADMIN',
  TEACHER: 'TEACHER',
  STUDENT: 'STUDENT',
  USER: 'USER'
}

/**
 * 角色状态接口
 */
interface RoleState {
  roleEnums: Record<string, string>
  isLoadingRoleEnums: boolean
}

/**
 * 角色存储
 * 管理角色相关的状态和操作
 */
export const useRoleStore = defineStore('role', {
  state: (): RoleState => ({
    roleEnums: storage.get('roleEnums') || {
      // 默认角色映射
      [ROLE_CODES.SUPER_ADMIN]: '超级管理员',
      [ROLE_CODES.ADMIN]: '管理员',
      [ROLE_CODES.TEACHER]: '教师',
      [ROLE_CODES.STUDENT]: '学生',
      [ROLE_CODES.USER]: '普通用户'
    },
    isLoadingRoleEnums: false
  }),
  
  getters: {
    /**
     * 获取角色枚举
     */
    getRoleEnums: (state) => state.roleEnums,
    
    /**
     * 获取角色名称
     * @param roleCode 角色代码
     */
    getRoleName: (state) => (roleCode: string) => {
      return state.roleEnums[roleCode] || roleCode
    }
  },
  
  actions: {
    /**
     * 加载角色枚举
     * 从用户信息中提取角色信息
     */
    async loadRoleEnums() {
      if (this.isLoadingRoleEnums) return this.roleEnums
      
      this.isLoadingRoleEnums = true
      
      try {
        // 使用默认角色枚举
        const roleEnums = { ...this.roleEnums }
        
        // 更新角色枚举
        this.setRoleEnums(roleEnums)
        
        return this.roleEnums
      } catch (error) {
        console.error('加载角色枚举失败:', error)
        return this.roleEnums
      } finally {
        this.isLoadingRoleEnums = false
      }
    },
    
    /**
     * 设置角色枚举
     * @param roleEnums 角色枚举
     */
    setRoleEnums(roleEnums: Record<string, string>) {
      this.roleEnums = roleEnums
      storage.set('roleEnums', roleEnums)
    },
    
    /**
     * 添加角色枚举
     * @param roleCode 角色代码
     * @param roleName 角色名称
     */
    addRoleEnum(roleCode: string, roleName: string) {
      if (!roleCode || !roleName) return
      
      this.roleEnums[roleCode] = roleName
      storage.set('roleEnums', this.roleEnums)
    },
    
    /**
     * 清除角色数据
     */
    clearRoleData() {
      // 保留默认角色枚举
      this.roleEnums = {
        [ROLE_CODES.SUPER_ADMIN]: '超级管理员',
        [ROLE_CODES.ADMIN]: '管理员',
        [ROLE_CODES.TEACHER]: '教师',
        [ROLE_CODES.STUDENT]: '学生',
        [ROLE_CODES.USER]: '普通用户'
      }
      storage.set('roleEnums', this.roleEnums)
    }
  }
}) 